package threadcoreknowledge.threadobjectclasscommonmethods;

/**
 * @ClassName WaitNotifyPrintOddEveWait
 * @Description TODO 两个线程交替打印0~100的奇偶数，用wait和notify
 * @Author wushaopei
 * @Date 2021/4/20 22:14
 * @Version 1.0
 */
public class WaitNotifyPrintOddEveWait {

    private static int count;
    private static final Object lock = new Object();

    // 1.拿到锁，我们就打印
    // 2.打印完，唤醒其他线程，自己就休眠
    static class TurningRunner implements Runnable{

        @Override
        public void run() {
            while (count <= 100){
                synchronized (lock){
                    // 拿到锁就打印
                    System.out.println(Thread.currentThread().getName() + ":" + count++);
                    lock.notify();
                    if (count<=100){
                        try {
                            // 如果任务还没结束，就让出当前的锁
                            lock.wait();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    }

    public static void main(String[] args) {

        new Thread(new TurningRunner(),"偶数").start();
        new Thread(new TurningRunner(),"奇数").start();
    }
}
